# 1.实例方法
class User:
    # 实例方法：因为它在操作当前对象
    def set_name(self, name):
        self.name = name  # 设置实例属性
# User.set_name('张三')  # 报错，不能直接操作实例方法
user = User()
user.set_name('张三')  # 自动传递一个参数给self：自身对象

# 2.类方法
class Car:
    class_name = '汽车'
    # 参数cls，表示当前类，调用时不需要传递
    @classmethod
    def update_class_name(cls, class_name):
        print('类方法')
        print(f'当前类{cls}')
        cls.class_name = class_name
Car.update_class_name('电动车')  # 使用类调用类方法
print(Car.class_name)  # 电动车
car = Car()
car.update_class_name('新能源车')  # 使用对象调用类方法
print(Car.class_name)  # 新能源车

# 3.静态方法
class Math:
    # 静态方法，没有固定形参
    @staticmethod
    def sum(*args):
        total = 0
        for num in args:
            total += num
        return total
    pai = 3.14  # 类属性，后续在这里修改精确
    # 计算圆面积
    @classmethod
    def yuan_mian_ji(cls, r):
        return cls.pai * r * r / 2
print(Math.sum(1, 3, 5, 7, 9))  # 类调用静态方法
math = Math()
print(math.sum(1, 3, 5, 7, 9))  # 对象调用静态方法
print(Math.yuan_mian_ji(3))
print(Math.yuan_mian_ji(5))
